Design programs allow people to specify various designs such as text documents, web pages, spreadsheets, and illustrations. These programs are faced with two important, but somewhat contradictory objectives. First, the programs must be easy to learn how to use. The consumer market for software has no tolerance for steep learning curves. Gone are the days where users were willing to spend hours reading through a manual to figure out how to use a particular software tool. In some markets, the learning curve for a piece of software must be nearly vertical if the software is to have any chance of being adopted. Second, design programs must offer a user sufficient flexibility to create the design of their choosing. These objectives conflict because of the basic fact that additional options mean additional complexity; while easy adoption necessitates simplicity.
Design programs used for the development of web pages are illustrative of the conflicting pressures facing software developers. Web page design programs need to generate web browser experiences that include design patterns that are specified by a user. The most basic example of a design pattern is the ability to click on a segment of text to trigger the presentation of a different web page by a web browser. From these simple beginnings, the web browsing experience has been enhanced to an unprecedented degree. Modern design program users expect to be able to implement an almost limitless array of design patterns. At the same time, it is advantageous to provide design programs that can be adopted by the ever increasing portion of the population that would like to create their own websites. It is for these reasons that web design programs so acutely feel the effects of the two conflicting pressures mentioned above.
There are two popular approaches in the related art for providing web design programs with the ability to give their users a rich design environment through the use of an intuitive interface. The first approach is to provide a large library of predesigned patterns to a user of a design program. The second approach is to provide a user with a more limited set of pattern elements and the flexibility to define the interaction of those elements as the designer sees fit. The two approaches each fulfill only one of the market pressures described above, but neither of them form a complete solution to the combined problem. Both approaches are described below in the context of a user designing a web store where the desired pattern is the presentation of a pop out box illustrating an image of a product when a link is selected.
In the first approach, a user will essentially only have to select the desired pattern from a library. This approach can also involve providing the ability to slightly customize the pattern through the use of a menu interface. For example, a user could scan the library to find a predesigned pop out box widget that would provide the desired pattern. The user would then be able to modify the widget through the previously mentioned interface to set the desired characteristics of the widget to meet the pattern the user desired.
In the second approach, a user will have a more limited set of design elements at their disposal, but greater flexibility in defining the characteristics of each design element. Continuing with the example of a web store, the user might be provided with the ability to define a button and a pop out window. The user would then be able to modify the button and pop out window to each comprise a specific event and an associated event handler. The event for the button would be an “on-click” event; and the event handler execution would cause the pop-out window to appear.
Both of the approaches have their drawbacks. In the first approach, creating the design program would be difficult because of the number of patterns that would need to be designed. This approach also diminishes the flexibility of a user because they are limited to the patterns that the design program can provide. Furthermore, as the number of predesigned patterns increased, the learning curve would also increase as the users would have to search through an increasingly large library. In the second approach, it may be difficult for a programmer to figure out how to implement a desired pattern. The program must think through how each element in a design pattern will interact from a top down perspective, and then relate the various design elements to specify the desired design experience. When specifying the pop out window, the designer will have to remember how the window got there in the first place, what the user is doing when the window is displayed, and what the user will want to do moving forward. Although this thought process is manageable in the context of a simple pop out window, this drawback is far more pronounced for more complex design patterns.